home *** CD-ROM | disk | FTP | other *** search
Text File | 2010-01-18 | 73.9 KB | 2,230 lines |
- ///////////////////////////////////////////////
- // mid.js //
- ///////////////////////////////////////////////
- //
- // More than 500 bugs in less than 150 Kilobyte!
- // ---------------------------------------------
- // Acknowledgement:
- //
- // This code contains parts of other extensions such as iconifyTabs, duplicateTab
- // Flowing tabs, miniT, and so one. Many thanks for their authors.
- // ---------------------
- // All the bugs are mine.
- //////////////////////////////////////////////
-
- const Cc = Components.classes;
- const Ci = Components.interfaces;
- midMyPrefB = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
- midMyPrefS = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
-
- // findService = Cc["@mozilla.org/find/find_service;1"].getService(Ci.nsIFindService);
-
-
- var mid_mud = {
- dictionary : "default",
- olddictionary : "",
- fromDialog : false,
- forwardCounter : 0,
- backCounter : -1,
- saveInHistory : true,
- midRowCounter : -1,
- midFullScreen : false,
- midFromRestore : false,
- homepage : "about:blank",
- midBrowserStartLocation : "http://www.google.com",
- midNS : "http://mid.mozdev.org/dictionaries",
- MAXREOPENFILES : 5,
- FIRSTDYNAMICMENUITEM : 2,
-
-
-
- Start: function () {
-
- domHelper = new domHelperObject();
- loadFFsearchEngines();
- this.tabManager.Init();
- this.managePreferences();
- this.setBrowserURL();
- this.fileManager.restoreDefaultSet();
-
- addEventListener("focus", this.focusManager.checkFocusedElement, true);
- addEventListener("mousedown", this.focusManager.checkClickedElement, true);
- addEventListener("keypress", this.focusManager.checkKeypressElement, false);
- },
-
- unload : function () {
- this.saveDSet();
- removeEventListener("focus", this.checkFocusedElement, true);
- removeEventListener("mousedown", this.checkClickedElement, true);
- removeEventListener("keypress", this.checkKeypressElement, false);
- },
-
- managePreferences : function () {
-
- /* get rid of old-style preferences */
- if (midMyPrefB.getPrefType("extensions.mid.dtype.en_en") == midMyPrefB.PREF_BOOL) {
- branch = midMyPrefS.getBranch("extensions.mid.dtype.");
- branch.deleteBranch("");
- }
- var i, typ;
- /* First run, set factory default */
- for (i = 0;
- (typ = document.getElementsByTagNameNS(this.midNS, "default-dict-type").item(i));
- i++) {
- var deftype = typ.getAttribute("label");
- if (midMyPrefB.getPrefType("extensions.mid.dtype." + deftype) != midMyPrefB.PREF_BOOL) {
- midMyPrefB.setBoolPref("extensions.mid.dtype." + deftype, true);
- }
- }
- /* manage layout */
-
- if (midMyPrefB.getPrefType("extensions.mid.layout.browserup") == midMyPrefB.PREF_BOOL) {
- if (midMyPrefB.getBoolPref("extensions.mid.layout.browserup")) {
- var t = document.getElementById("mid_tabbox");
- var s = document.getElementById("mid_BrowserSplitter");
- var b = document.getElementById("mid_BrowserBox");
- var p = b.parentNode;
- p.removeChild(b);
- p.removeChild(t);
- p.insertBefore(b, s);
- p.appendChild(t);
- }
- }
-
- /* get throbber setting */
-
- if (midMyPrefB.getPrefType("extensions.mid.disable.throbber") == midMyPrefB.PREF_BOOL) {
- if (midMyPrefB.getBoolPref("extensions.mid.disable.throbber")) {
- this.WebProgressListener.throbberDisabled = true;
- }
- }
-
- },
-
-
- removeAllPreferences : function () {
-
- if (!this.util.confirm(this.util.getLocaleString("delete.allpreferences"))) {
- return;
- }
-
- var branch = midMyPrefS.getBranch("extensions.mid.");
- branch.deleteBranch("");
- this.removeDefaultSet();
-
- var popup = document.getElementById("mid_lastusedfilespopup");
- while (popup.childNodes.length > 1) {
- popup.removeChild(popup.lastChild);
- }
-
- this.changeDictionaryName("default");
- this.loadDictionaries();
- this.util.localAlert("revert.to.original.settings","");
- },
-
-
- arrangeLUFPrefs : function (aLUF) {
-
- var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
- createInstance(Ci.nsIScriptableUnicodeConverter);
- conv.charset = "UTF-8";
-
- var file = aLUF;
- var midMyPrefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
- var savedFilesPrefs = midMyPrefs.getBranch("extensions.mid.lastusedsets.");
- var children = savedFilesPrefs.getChildList("", {});
- var sortedLUFPrefs = children.sort(); //
- var newChildren = [];
- var usedFile = "";
-
- newChildren.push(file);
-
- for (i = 0; i < children.length; i++) {
- if (savedFilesPrefs.prefHasUserValue(sortedLUFPrefs[i])) {
- var nFile = savedFilesPrefs.getComplexValue(sortedLUFPrefs[i], Ci.nsILocalFile);
- if (nFile.path != file.path) {
- newChildren.push(nFile);
- }
- }
- }
-
- var limit = Math.min(this.MAXREOPENFILES, newChildren.length);
-
- for (i = 0; i < limit; i++) {
- savedFilesPrefs.setComplexValue(i + 1, Ci.nsILocalFile, newChildren[i]);
- }
-
- // TODO:more testing ...
- for (i = newChildren.length + 1; i < this.MAXREOPENFILES + 1; i++) {
- if (savedFilesPrefs.prefHasUserValue(i)) {
- savedFilesPrefs.clearUserPref(i);
- }
- }
-
- // try {
- // usedFile = conv.ConvertToUnicode(savedFilesPrefs.getCharPref("1"));
- // } catch (e) {
- // usedFile = savedFilesPrefs.getCharPref("1");
- // }
-
- document.getElementById("mid_stat_dictset").value = file.path;
- return true;
- },
-
- reOpen : function () {
-
- var midMyPrefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService);
- var savedFilesPrefs = midMyPrefs.getBranch("extensions.mid.lastusedsets.");
- var children = savedFilesPrefs.getChildList("", {});
-
- var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
- createInstance(Ci.nsIScriptableUnicodeConverter);
- conv.charset = "UTF-8";
-
- var menuitem;
- var popup = document.getElementById("mid_lastusedfilespopup");
-
- var popupMenuItems = popup.getElementsByTagName("menuitem");
-
- if ( children.length > 0 && popupMenuItems.length == 1 ) {
- var separator = document.createElement("menuseparator");
- popup.appendChild(separator);
- }
-
- var sortedLUFPrefs=children.sort();
-
- for (i = 0; i < children.length; i++ ){
- if ( ! savedFilesPrefs.prefHasUserValue( sortedLUFPrefs[i] ) ) continue;
-
- var file = savedFilesPrefs.getComplexValue( sortedLUFPrefs[i], Ci.nsILocalFile);
- try {
- var menulabel = conv.ConvertToUnicode(savedFilesPrefs.getCharPref(sortedLUFPrefs[i]));
- } catch (e) { menulabel = savedFilesPrefs.getCharPref(sortedLUFPrefs[i]);
- }
- if ( popupMenuItems.length < this.FIRSTDYNAMICMENUITEM + i ) { // existing menuitem?
- menuitem = document.createElement("menuitem");
- popup.appendChild(menuitem);
- } else {
- menuitem = popupMenuItems.item(i+1);
- }
- menuitem.setAttribute("label", menulabel );
- menuitem.setAttribute("oncommand",
- "mid_mud.fileManager.restoreSet(" + (i+1) +',"' + menulabel.replace(/\\/g,'\\\\') + '");');
- }
- return true;
- },
-
-
- removeDefaultSet: function () {
-
- var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties)
- .get("ProfD", Components.interfaces.nsIFile);
- file.append("mid_default.dis");
-
- try {
- if (file.exists()) {
- file.remove(false);
- }
- } catch (e) {
- if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
- this.util.localAlert("file.access.denied", "");
- }
- else {
- alert("i/o error: " + e.name + "-" + e.message);
- }
- return false;
- }
- },
-
- changeDictionaryName : function (dName) {
-
- this.dictionary = dName;
- switch (this.dictionary) {
- case "temporary":
- document.getElementById("mid_stat_dictset").value = this.util.getLocaleString("temporary.set");
- break;
- case "default":
- document.getElementById("mid_stat_dictset").value =
- this.util.getLocaleString("default.set");
- break;
- default:
- document.getElementById("mid_stat_dictset").value = dName;
- }
- },
-
- setBrowserURL : function () {
- /* Started from a browser */
- if (window.opener && window.opener.content.location.href !== "") {
- midBrowserStartLocation = window.opener.content.location.href;
- domHelper.browserBrowser.setAttribute("src", midBrowserStartLocation);
- // domHelper.browserBrowser.markupDocumentViewer.fullZoom = 1.5; //test
- document.getElementById("mid_Url").value = midBrowserStartLocation;
- }
- },
-
- syncBrowserURL : function () {
- const nsIWindowMediator = Components.interfaces.nsIWindowMediator;
- var windowMediator = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService();
- windowMediator = windowMediator.QueryInterface(nsIWindowMediator);
- var win = windowMediator.getMostRecentWindow("navigator:browser");
- if ( win && win.gBrowser) {
- domHelper.browserBrowser.setAttribute("src", win.gBrowser.contentWindow.location);
- document.getElementById("mid_Url").value = win.gBrowser.contentWindow.location;
- }
- },
-
- appendToOldDictionaries : function (midlines) {
-
- var mytabpanels = domHelper.tabpanelsElement;
- var nArray = [], dictid, i;
-
- if (this.olddictionary == this.dictionary || this.fromDialog) {
- for (i = 0; (iBrowser = mytabpanels.getElementsByTagName("browser").item(i)); i++) {
- dictid = iBrowser.xmlDic.getAttribute("dictid");
- if (this.dictionary === "default") {
- if (this.checkDictChecked(iBrowser.xmlDic)) {
- nArray.push(dictid);
- }
- }
- else {
- if (this.util.inArray(midlines, dictid)) {
- nArray.push(dictid);
- }
- }
- }
- }
-
- this.olddictionary = this.dictionary;
-
- if (!midlines) {
- return nArray;
- }
-
- for (i = 0; i < midlines.length; i++) {
- if (this.util.inArray(nArray, midlines[i]) !== true) {
- nArray.push(midlines[i]);
- }
- }
- return nArray;
- },
-
-
- loadDictionaries : function (midlines) {
-
- var i, xmlDic, dictType, dictChecked, dtchecked, dictId;
- var newDicos = [];
- var ITomb = [];
- var DTomb = [];
-
- var tps = domHelper.tabpanelsElement;
- var mytabs = domHelper.tabsElement;
-
- newDicos = this.appendToOldDictionaries(midlines);
- // if (midlines)
-
- this.tabManager.removeTabs();
-
- for (i = 0; (xmlDic = document.getElementsByTagNameNS(this.midNS, "dict").item(i)); i++) {
- dictId = xmlDic.getAttribute("dictid");
- dictType = xmlDic.getAttribute("type");
-
- if (midlines) {
- if (newDicos && (newDicos.join().indexOf(dictId) > -1)) { // csunya
- DTomb.push(newDicos.join().indexOf(dictId) / 37);
- ITomb[newDicos.join().indexOf(dictId) / 37] = i;
- }
- }
- if (!midlines) {
- if (this.checkDictChecked(xmlDic)) {
- if (!this.util.inArray(newDicos, dictId)) {
- newDicos.push(dictId);
- }
- DTomb.push(newDicos.join().indexOf(dictId) / 37); // nyilvßn a vΘge
- ITomb[newDicos.join().indexOf(dictId) / 37] = i;
- }
- }
-
- } // for
-
- for (var k in DTomb) {
- if (DTomb.hasOwnProperty(k)) {
- xmlDic = document.getElementsByTagNameNS(this.midNS, "dict").item(ITomb[k]);
- if (xmlDic) {
- this.tabManager.createDictionaryTab(xmlDic);
- }
- }
- }
-
- DTomb = null;
- ITomb = null;
-
- /* Add progress listeners and find first not collapsed */
-
- var selecteditem = 0;
- var myBrowser;
-
- for (i = tps.getElementsByTagName("browser").length - 1;
- (myBrowser = tps.getElementsByTagName("browser").item(i));
- i--) {
- myBrowser.docShell.allowJavascript = true;
-
- if (myBrowser.xmlDic.getAttribute("js") == "disabled") {
- myBrowser.docShell.allowJavascript = false;
- }
- selecteditem = i;
- try {
- myBrowser.addProgressListener(this.WebProgressListener,
- Ci.nsIWebProgress.NOTIFY_STATE_NETWORK);
- } catch (e) {
- alert("addProgressListener failed");
- }
- }
- mytabs.selectedIndex = selecteditem;
-
- this.fromDialog = false;
- },
-
- checkDictChecked : function (xmlDic) {
-
- var dictChecked = false;
- var typeChecked = false;
-
- var dictType = xmlDic.getAttribute("type");
- var dictId = xmlDic.getAttribute("dictid");
-
- if (midMyPrefB.getPrefType("extensions.mid.dtype." + dictType) == midMyPrefB.PREF_BOOL) {
- typeChecked = midMyPrefB.getBoolPref("extensions.mid.dtype." + dictType);
- }
- else {
- return false;
- }
- if (!typeChecked) {
- return false;
- }
-
- if (midMyPrefB.getPrefType("extensions.mid." + dictId + "_checked") == midMyPrefB.PREF_BOOL) {
- dictChecked = midMyPrefB.getBoolPref("extensions.mid." + dictId + "_checked");
- } else {
- xmlDic.getAttribute("checked") == "true" ? dictChecked = true : dictChecked = false;
- }
-
- if (!dictChecked) {
- return false;
- }
-
- return true;
- },
-
-
- getDictionaryPreferences : function () {
-
- var midDictArg = {}, midlines = [] ;
-
- this.saveDSet();
-
- if (this.dictionary === "new") {
- this.tabManager.removeTabs();
- }
-
- midDictArg.dictionary = this.dictionary;
- this.olddictionary = this.dictionary;
- this.fromDialog = true;
- openDialog("choose_dict.xul", "pref",
- "modal=1,dialog=1,chrome=1,centerscreen=1,resizable=0", midDictArg);
-
- if (midDictArg.dictionary == "cancelled" ) {
- this.dictionary="cancelled";
- mid_mud.fileManager.restoreDefaultSet();
- return;
- };
-
- if (midDictArg.dictionary === "new" || midDictArg.dictionary === "saveas") {
- mid_mud.fileManager.saveSetAs(); // changes dictionary name
- if (this.dictionary === "new" || this.dictionary === "") {
- this.changeDictionaryName("temporary");
- }
- else {
- this.saveDSet();
- }
- }
- else {
- this.changeDictionaryName(midDictArg.dictionary);
- }
-
- if (midDictArg.mylines) {
- midlines = midDictArg.mylines;
- this.loadDictionaries(midlines);
- } else {
- if (midDictArg.result) {
- this.loadDictionaries();
- }
- }
- this.fromDialog = false;
- },
-
- newDictionarySet : function () {
- this.saveDSet();
- this.dictionary = "new";
- this.getDictionaryPreferences();
-
- },
-
- saveDSet : function () {
- // if (!this.util.confirm(this.util.getLocaleString("dictionaryset.save.changes"))) return;
- if ((this.dictionary === "temporary") || (this.dictionary === "new")) {
- return;
- }
-
- if (this.dictionary === "default") {
- this.fileManager.saveDefaultSet();
- return;
- }
- this.fileManager.saveNamedSet();
- },
-
- updateStatusBarCounter : function () {
- document.getElementById("mid_stat_counter").value=mid_mud.transMemory.getRowCount();
- }
-
- };
-
- // members //
-
- mid_mud.WebProgressListener = {
-
- progresscounter : 0,
- throbberDisabled : false,
-
- QueryInterface: function (iid) {
- if (iid.equals(Ci.nsIWebProgressListener) ||
- iid.equals(Ci.nsISupportsWeakReference) ||
- iid.equals(Ci.nsISupports)) {
- return this;
- }
- throw Components.results.NS_ERROR_NO_INTERFACE;
- },
-
- onProgressChange : function (wp, req, cur, max, curtotal, maxtotal) {},
-
- onStateChange : function (wp, req, state, status) {
- if ((state & Ci.nsIWebProgressListener.STATE_STOP) &&
- (state & Ci.nsIWebProgressListener.STATE_IS_NETWORK)) {
- if (this.progresscounter > 0) {
- this.progresscounter = this.progresscounter - 1;
- }
- if (this.progresscounter === 0) {
- document.getElementById("mid_stoploadbutton").disabled = true;
- }
- if (!this.throbberDisabled) {
- setTimeout(window.mid_mud.tabManager.setThrobber, 0, wp.DOMWindow, false);
- }
- }
- if ((state & Ci.nsIWebProgressListener.STATE_START) &&
- (state & Ci.nsIWebProgressListener.STATE_IS_NETWORK)) {
- document.getElementById("mid_stoploadbutton").disabled = false;
- this.progresscounter = this.progresscounter + 1;
-
- if (!this.throbberDisabled) {
- setTimeout(window.mid_mud.tabManager.setThrobber, 0, wp.DOMWindow, true);
- }
- }
- if ((state & Ci.nsIWebProgressListener.STATE_TRANSFERRING)) {
- if (!this.throbberDisabled) {
- setTimeout(window.mid_mud.tabManager.setThrobber, 0, wp.DOMWindow, false);
- }
- }
- },
- onLocationChange : function (wp, req, loc) {},
- onStatusChange : function (wp, req, status, message) {},
- onSecurityChange : function (wp, req, state) {}
- };
-
-
-
- mid_mud.focusManager = {
-
- preventFocusReset : false,
- lastfocused : "micimacko",
-
- focusSearchField : function () {
- domHelper.inputElement.focus();
- domHelper.f2.setAttribute("class", "midf2hidden");
- this.preventFocusReset = false;
- },
-
- checkFocusedElement : function (event) {
- if (window.fullScreen) {
- this.preventFocusReset = true;
- return;
- } // there is no input field
-
- cmdDispatcher = document.commandDispatcher;
-
- if (event.target.id == "mid_searchWord") {
- domHelper.f2.setAttribute("class", "midf2hidden");
- }
-
- if (this.preventFocusReset) {
- return;
- }
-
- if (event.target && event.target.id == "mid_Url") {
- this.preventFocusReset = true;
- }
-
- if (cmdDispatcher.focusedElement) {
- if (cmdDispatcher.focusedElement.tagName) {
- if (cmdDispatcher.focusedElement.id == "mid_searchWord") {
- domHelper.f2.setAttribute("class", "midf2hidden");
- }
- if (cmdDispatcher.focusedElement.tagName != this.lastfocused) {
- this.lastfocused = cmdDispatcher.focusedElement.tagName;
- setTimeout(window.mid_mud.focusManager.focusSearchField, 20);
- }
- } else {
- setTimeout(window.mid_mud.focusManager.focusSearchField, 20);
- }
- } else {
- setTimeout(window.mid_mud.focusManager.focusSearchField, 20);
- }
-
- },
-
- checkClickedElement : function (event) {
- this.preventFocusReset = true;
- },
-
- checkKeypressElement : function (event) {
-
- this.preventFocusReset = true;
-
- if (event.altKey) {
- return;
- }
-
- if (event.originalTarget.tagName) {
- if (event.originalTarget.id == "mid_searchWord") {
- this.preventFocusReset = false;
- }
- if (event.originalTarget.tagName == "HTML") {
- this.preventFocusReset = true;
- }
- } else {
- this.preventFocusReset = false;
- }
-
- // alert (event.keyCode);
- if (event.keyCode == 9) {
- this.preventFocusReset = true;
- }
- }
- };
-
-
-
- function domHelperObject() {
- this.tabpanelsElement = document.getElementById("mid_tabpanels");
- this.tabsElement = document.getElementById("mid_tabs");
- this.tabboxElement = document.getElementById("mid_tabbox");
- this.inputElement = document.getElementById("mid_searchWord");
- this.f2 = document.getElementById("mid_focusLabel");
- this.browserBrowser = document.getElementById("mid_MainBrowser");
- this.mainMenubar = document.getElementById("mid_menubar");
- this.mainStatusbar = document.getElementById("mid_statusbar");
- this.browserSplitter = document.getElementById("mid_BrowserSplitter");
- this.browserBox = document.getElementById("mid_BrowserBox");
- this.wordsTree = document.getElementById("mid_wordstree");
- this.url = document.getElementById("mid_Url");
- this.sideBar = document.getElementById("mid_sidebar");
- };
-
-
- mid_mud.tabManager = {
-
- tabIconic : "false" ,
-
- Init : function () {
- this.tabPanelsElement = document.getElementById("mid_tabpanels");
- this.tabsElement = document.getElementById("mid_tabs");
- this.tabIconic = this.tabsElement.getAttribute("iconic");
- },
-
- createDictionaryTab : function (xmlDic) {
-
- var newTab, newBrowser;
- newTab = document.createElement("tab");
-
- mid_mud.util.populateWithAttributes(newTab,
- "id", "tab" + xmlDic.getAttribute("dictid"),
- "context", "mid_tabcontextpopup",
- "label", xmlDic.getAttribute("label"),
- "image", xmlDic.getAttribute("fav"),
- "tooltiptext", xmlDic.getAttribute("label") + " : " + xmlDic.getAttribute("home"),
- "dicthome", xmlDic.getAttribute("home"),
- "iconic", this.tabIconic);
-
- this.tabsElement.appendChild(newTab);
-
- newBrowser = document.createElement("browser");
- newBrowser.xmlDic = xmlDic;
- mid_mud.util.populateWithAttributes(newBrowser,
- "id", "b" + xmlDic.getAttribute("dictid"),
- "type", "content-primary",
- "context", "mid_browsercontextpopup",
- "src", xmlDic.getAttribute("home"),
- "homepage", xmlDic.getAttribute("home"),
- "ondblclick", "mid_mud.lookup.lookupFromContext()");
-
- this.tabPanelsElement.appendChild(newBrowser);
- },
-
- styleTabs : function (event) {
-
- var curtab, curpanel, i
-
- if (event) {
- var cButton = event.originalTarget;
- if (cButton.localName != "toolbarbutton") {
- return; // elsewere on tabs
- }
- }
-
- for (i = 0; (curtab = this.tabsElement.getElementsByTagName("tab").item(i)); i++) {
- curpanel = document.getElementById(curtab.linkedpanel);
- if (this.tabIconic == "true" ) {
- curtab.setAttribute("iconic", "false");
- }
- else {
- curtab.setAttribute("iconic", "true");
- }
- }
-
- if (cButton) {
- if (this.tabIconic == "true" ) {
- cButton.setAttribute("iconic", "false");
- this.tabIconic = "false"
- }
- else {
- cButton.setAttribute("iconic", "true");
- this.tabIconic = "true"
- }
- }
- domHelper.tabsElement.setAttribute("iconic",this.tabIconic);
- },
-
- removeTabs : function () {
-
- while (this.tabPanelsElement.hasChildNodes()) {
- try {
- this.tabPanelsElement.firstChild.removeProgressListener(mid_mud.WebProgressListener);
- }
- catch (e) {
- alert("removeProgressListener failed");
- }
- this.tabPanelsElement.removeChild(this.tabPanelsElement.firstChild);
- }
-
- while (this.tabsElement.hasChildNodes()) {
- this.tabsElement.removeChild(this.tabsElement.firstChild);
- }
- },
-
- setThrobber : function (dm, image) {
-
- var doc = dm;
- if (!doc) { // ff2
- return;
- }
- var tabsArray = domHelper.tabsElement.getElementsByTagName("tab");
- var tabPanelsArray = domHelper.tabpanelsElement; // this.tabPanelsElement;
-
- var i, iBrowser, iTab;
- for (i = 0;(iBrowser = tabPanelsArray.getElementsByTagName("browser").item(i)); i++) {
- iTab = tabsArray.item(i);
- if (iBrowser.currentURI && iBrowser.currentURI.spec == doc.document.location.href) {
- if (image) {
- iTab.setAttribute("busy", "true");
- iTab.removeAttribute("image");
- }
- else {
- if (iTab.hasAttribute("busy")) {
- iTab.removeAttribute("busy");
- iTab.setAttribute("image", iBrowser.xmlDic.getAttribute("fav"));
- }
- }
- }
- }
-
- },
-
- closeTab : function () {
-
- var dictTabId = document.popupNode.id;
- var dictBrowserId = dictTabId.replace("tab", "b");
-
- var dictTabToRemove = document.getElementById(dictTabId);
- var dictBrowserToRemove = document.getElementById(dictBrowserId);
-
- if (dictTabToRemove.getAttribute("selected", "true")) {
- this.tabsElement.advanceSelectedTab(1, true);
- }
-
- try {
- dictBrowserToRemove.removeProgressListener(mid_mud.WebProgressListener);
- }
- catch (e) {}
-
- this.tabPanelsElement.removeChild(dictBrowserToRemove);
- this.tabsElement.removeChild(dictTabToRemove);
-
- this.tabPanelsElement.selectedIndex = this.tabsElement.selectedIndex; //??
- var dictId = dictTabId.replace("tab", "");
- midMyPrefB.setBoolPref("extensions.mid." + dictId + "_checked", false);
-
- },
-
- openHomePage : function () {
- var dictTab = document.getElementById(document.popupNode.id);
- window.open(dictTab.getAttribute("dicthome"));
- },
-
- dictTabPopupShowing : function () {
- // nothing to do as for now
- // alert(document.popupNode.id);
- },
-
- dragAndDrop : {
- onDragStart: function (event, transferData, action) {
- var tabArray = domHelper.tabsElement.getElementsByTagName("tab");
- var myIndex = -1;
- for (var i = 0; i < tabArray.length; i++) {
- if (event.target.id == tabArray[i].id) {
- myIndex = i;
- }
- }
- mid_mud.util.dumpToConsole(myIndex);
- if (myIndex == -1) {
- return;
- }
- this.index = myIndex;
- transferData.data = new TransferData();
- transferData.data.addDataForFlavour("text/x-mid-tab", 'nyul');
- },
-
- getSupportedFlavours : function () {
- var flavours = new FlavourSet();
- flavours.appendFlavour("text/x-mid-tab");
- return flavours;
- },
-
- onDragOver : function(event,flavour,session) {
- return true;
- },
-
- onDragEnter : function(event, session) {
- },
-
- onDragExit : function(event, session) {
- },
-
- canDrop: function(event, session) {
- if (session.sourceNode &&
- session.sourceNode.parentNode == document.getElementById("mid_tabs") &&
- ((event.screenX >= session.sourceNode.boxObject.screenX &&
- event.screenX <= (session.sourceNode.boxObject.screenX +
- session.sourceNode.boxObject.width)) &&
- (event.screenY >= session.sourceNode.boxObject.screenY &&
- event.screenY <= (session.sourceNode.boxObject.screenY +
- session.sourceNode.boxObject.height)))
- )
- return false;
- return true;
- },
-
- onDrop: function (event, dropData, session) {
- var newIndex=this.getNewIndex(event);
- if (newIndex != this.index ) {
- this.moveTabTo(newIndex, session);
- }
- },
-
- moveTabTo: function (newIndex, session) {
- var tabs = domHelper.tabsElement;
- var tabpanels = domHelper.tabpanelsElement;
- var draggedBrowser = tabpanels.getElementsByTagName("browser").item(this.index);
- var sh = draggedBrowser.sessionHistory;
- var originalHistory = this.copyTabHistory(sh);
- try {
- draggedBrowser.removeProgressListener(mid_mud.WebProgressListener);
- } catch (e) {}
- tabs.insertBefore(session.sourceNode, tabs.getElementsByTagName("tab").item(newIndex));
- tabpanels.insertBefore(draggedBrowser, tabpanels.getElementsByTagName("browser").item(newIndex));
- tabs.selectedItem = session.sourceNode;
- tabpanels.selectedPanel = draggedBrowser;
- draggedBrowser.addProgressListener(mid_mud.WebProgressListener,
- Ci.nsIWebProgress.NOTIFY_STATE_NETWORK);
- this.restoreDraggedHistory(draggedBrowser.webNavigation, originalHistory);
-
- },
-
- getNewIndex: function (event) {
- var tabArray = document.getElementById("mid_tabs").getElementsByTagName('tab');
-
- for (var i = 0; i < tabArray.length; i++)
- if (event.clientX < tabArray[i].boxObject.x + tabArray[i].boxObject.width / 2)
- if (event.clientY < tabArray[i].boxObject.y + tabArray[i].boxObject.height)
- return i;
-
- return tabArray.length;
- },
-
- copyTabHistory: function (originalHistory) {
- var range = {start : 0, length : originalHistory.count};
-
- var copiedHistory = [];
- for (var i = range.start; i < range.length; i++) {
- copiedHistory.push(originalHistory.getEntryAtIndex(i, false));
- }
- copiedHistory.index = originalHistory.index;
-
- return copiedHistory;
- },
-
- restoreDraggedHistory: function(webNav, originalHistory) {
-
- var newHistory = webNav.sessionHistory;
-
- newHistory.QueryInterface(Components.interfaces.nsISHistoryInternal);
-
- // delete history entries if they are present
-
- if (newHistory.count > 0)
- newHistory.PurgeHistory(newHistory.count);
-
- for (var i = 0; i < originalHistory.length; i++) {
- var entry = originalHistory[i].QueryInterface(Components.interfaces.nsISHEntry);
- var newEntry = this.restoreHistoryEntry(entry);
- if (newEntry)
- newHistory.addEntry(newEntry, true);
- }
-
- // Go to current history location
- if (originalHistory.index < originalHistory.length)
- gotoHistoryIndex(10);
-
- function gotoHistoryIndex(attempts) {
- try {
- webNav.gotoIndex(originalHistory.index);
- }
- catch(e) {
- // do some math to increase the timeout
- // each time we try to update the history index
- if (attempts)
- setTimeout(gotoHistoryIndex, (11 - attempts) * (15 - attempts), --attempts);
- }
- }
- },
-
- restoreDraggedHistory: function (webNav, originalHistory) {
- function gotoHistoryIndex(attempts) {
- try {
- webNav.gotoIndex(originalHistory.index);
- }
- catch (e) {
- // do some math to increase the timeout
- // each time we try to update the history index
- if (attempts) {
- setTimeout(gotoHistoryIndex, (11 - attempts) * (15 - attempts), --attempts);
- }
- }
- }
-
- var newHistory = webNav.sessionHistory;
-
- newHistory.QueryInterface(Components.interfaces.nsISHistoryInternal);
-
- // delete history entries if they are present
-
- if (newHistory.count > 0) {
- newHistory.PurgeHistory(newHistory.count);
- }
- for (var i = 0; i < originalHistory.length; i++) {
- var entry = originalHistory[i].QueryInterface(Components.interfaces.nsISHEntry);
- var newEntry = this.restoreHistoryEntry(entry);
- if (newEntry) {
- newHistory.addEntry(newEntry, true);
- }
- }
-
- // Go to current history location
- if (originalHistory.index < originalHistory.length) {
- gotoHistoryIndex(10);
- }
- },
-
- restoreHistoryEntry: function (aEntry) {
- if (!aEntry) {
- return null;
- }
- aEntry = aEntry.QueryInterface(Components.interfaces.nsISHContainer);
- var newEntry = aEntry.clone();
- newEntry = newEntry.QueryInterface(Components.interfaces.nsISHContainer);
- newEntry.loadType = Math.floor(aEntry.loadType);
- if (aEntry.childCount) {
- for (var j = 0; j < aEntry.childCount; j++) {
- var childEntry = this.restoreHistoryEntry(aEntry.GetChildAt(j));
- if (childEntry) {
- newEntry.AddChild(childEntry, j);
- }
- }
- }
- return newEntry;
- }
-
- }
-
- };
-
-
-
-
- mid_mud.layoutManager = {
-
- fullScreen : function () {
-
- var midmyelement, i;
- window.fullScreen = !window.fullScreen;
- document.getElementById("mid_viewFullScreen").setAttribute("checked", window.fullScreen);
-
- for (i = 0; (midmyelement = document.getElementsByTagName("toolbar").item(i)); i++) {
- midmyelement.setAttribute("collapsed", window.fullScreen);
- }
-
- for (i = 0; (midmyelement = document.getElementsByTagName("statusbar").item(i)); i++) {
- midmyelement.setAttribute("collapsed", window.fullScreen);
- }
-
- for (i = 0; (midmyelement = document.getElementsByTagName("menubar").item(i)); i++) {
- midmyelement.setAttribute("collapsed", window.fullScreen);
- }
-
- },
-
- browserView : function () {
- var browserSplitter = document.getElementById("mid_BrowserSplitter");
- var browser = document.getElementById("mid_BrowserBox");
- if (browser.getAttribute("collapsed") == "true") {
- document.getElementById("mid_viewpopupbrowseritem").setAttribute("checked", "true");
- browser.setAttribute("collapsed", "false");
- browserSplitter.setAttribute("collapsed", "false");
- } else {
- document.getElementById("mid_viewpopupbrowseritem").setAttribute("checked", "false");
- browser.setAttribute("collapsed", "true");
- browserSplitter.setAttribute("collapsed", "true");
- }
- },
-
- histView: function () {
- var wordsTree = document.getElementById("mid_wordstree");
- if (wordsTree.getAttribute("collapsed") == "true") {
- document.getElementById("mid_viewpopuphistitem").setAttribute("checked", "true");
- wordsTree.setAttribute("collapsed", "false");
- } else {
- document.getElementById("mid_viewpopuphistitem").setAttribute("checked", "false");
- wordsTree.setAttribute("collapsed", "true");
- }
- this.checkSideBar();
- },
-
- checkSideBar: function () {
-
- var s = domHelper.sideBar;
- var sc = true;
- for (var i = 0; i < s.childNodes.length; i++) {
- if ( s.childNodes[i].collapsed == false) {
- sc = false;
- break;
- }
- }
- s.collapsed = sc;
- },
-
-
- statusbarView: function () {
- var statusbar = document.getElementById("mid_statusbar");
- if (statusbar.getAttribute("collapsed") == "true") {
- document.getElementById("mid_viewpopupstatusbaritem").setAttribute("checked", "true");
- statusbar.setAttribute("collapsed", "false");
- } else {
- document.getElementById("mid_viewpopupstatusbaritem").setAttribute("checked", "false");
- statusbar.setAttribute("collapsed", "true");
- }
- }
-
-
- };
-
-
- mid_mud.helpMenu = {
-
- showAllDictionaries : function () {
-
- var myff = Cc["@mozilla.org/file/directory_service;1"]
- .getService(Ci.nsIProperties)
- .get("ProfD", Ci.nsIFile);
-
- var ios = Cc["@mozilla.org/network/io-service;1"]
- .getService(Ci.nsIIOService);
-
- var fileHandler = ios.getProtocolHandler("file")
- .QueryInterface(Ci.nsIFileProtocolHandler);
-
- var URL = fileHandler.getURLSpecFromFile(myff);
- var fURL = "jar:" + URL +
- "/extensions/{9ef1e09b-d4b2-4a55-ac3e-1cb330546bec}" +
- "/chrome/mid.jar!/content/dictionaries.xml";
- var mURL = "jar:" + URL + "/chrome/mid.jar!/content/dictionaries.xml";
-
- var showDicos = {
-
- Firefox : function () { window.open(fURL); },
- Iceweasel : function () { window.open(fURL); },
- Flock : function () { window.open(fURL); },
- Netscape : function () { window.open(fURL); },
- SeaMonkey : function () { window.open(fURL); },
- mid : function () {
- var myff = Cc["@mozilla.org/file/directory_service;1"]
- .getService(Ci.nsIProperties)
- .get("resource:app", Ci.nsIFile);
- var URL = fileHandler.getURLSpecFromFile(myff);
- var xURL = URL + "chrome/content/mid/dictionaries.xml";
- window.open(xURL);
- }
- };
-
- mid_mud.util.browserWrapper(showDicos);
-
- },
-
- aboutBox : function () {
- openDialog("about.xul", "About mid",
- "chrome,resizeable,centerscreen,dialog,min-width=350px");
- },
-
- showHomePage : function () {
- window.open("http://mid.mozdev.org");
- }
-
- };
-
-
- mid_mud.fileManager = {
-
- fileWriter : function (file) {
-
- var fileStream =
- Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
-
- try {
- fileStream.init(file, 0x04 | 0x08 | 0x20, 420, 0);
- } catch (e) {
- if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
- mid_mud.util.localAlert("file.access.denied", "");
- return false;
- } else {
- alert("fileManager.fileWriter: i/o error: " + e.name + "-" + e.message);
- return false;
- }
- }
-
- var i, dictTab, dictId;
- for (i = 0; (dictTab = document.getElementsByTagName("tab").item(i)); i++) {
- dictId = dictTab.id.replace(/^tab/, "") + ";" + dictTab.label;
- fileStream.write(dictId + "\n", dictId.length + 1);
- }
-
- fileStream.close();
- return true;
- },
-
- fileReader : function (file, midlines) {
-
- var is =
- Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
-
- try {
- is.init(file, 1, 444, false);
- } catch (e) {
- if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
- mid_mud.util.localAlert("file.access.denied", "");
- }
- else {
- alert("fileManager.fileReader: i/o error: " + e.name + "-" + e.message);
- }
- return false;
- }
-
- is.QueryInterface(Ci.nsILineInputStream);
- // read lines into array
- var midline = {}, hasmore;
-
- do {
- hasmore = is.readLine(midline);
- var dictId = midline.value.replace(/;.*$/, "");
- dictId = dictId.replace(/(.{37}).*/, "$1");
- midlines.push(dictId);
- } while (hasmore);
-
- is.close();
- return true;
- },
-
- saveSetAs : function () {
-
- var nsIFilePicker = Ci.nsIFilePicker;
- var file;
-
- var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
- fp.init(window, mid_mud.util.getLocaleString("choose.file"), nsIFilePicker.modeSave);
- fp.appendFilters(nsIFilePicker.filterAll);
-
- if (fp.show() == nsIFilePicker.returnCancel) {
- return false;
- }
- file = fp.file;
-
- if (!this.fileWriter(file)) {
- return false;
- }
-
- if (typeof(mid_mud.arrangeLUFPrefs) === "function") {
- mid_mud.arrangeLUFPrefs(file);
- }
-
- // mid_mud.util.localAlert("file.saved", "");
- mid_mud.changeDictionaryName(this.getDictionaryFilename());
-
- },
-
-
- saveNamedSet : function () {
-
- var file = Components.classes["@mozilla.org/file/local;1"]
- .createInstance(Components.interfaces.nsILocalFile);
- var savedFilesPrefs = midMyPrefS.getBranch("extensions.mid.lastusedsets.");
-
- if (savedFilesPrefs.prefHasUserValue(1)) {
- file = savedFilesPrefs.getComplexValue(1, Components.interfaces.nsILocalFile);
- }
- else {
- return false;
- }
-
- if (!this.fileWriter(file)) {
- return false;
- }
- return true;
- },
-
-
- saveDefaultSet : function () {
- var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties)
- .get("ProfD", Components.interfaces.nsIFile);
- file.append("mid_default.dis");
-
- if (!this.fileWriter(file)) {
- return false;
- }
- return true;
-
- },
-
-
- restoreSet : function (filePrefNum, filename) {
-
- mid_mud.saveDSet(); //**
-
- var def, fp, file, midlines = [];
-
- var nsIFilePicker = Ci.nsIFilePicker;
-
- if (typeof(filePrefNum) != 'number') {
- fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
- fp.init(window, mid_mud.util.getLocaleString("choose.file"), nsIFilePicker.modeRead);
- fp.appendFilters(nsIFilePicker.filterAll);
- if (fp.show() == nsIFilePicker.returnCancel) {
- return false;
- }
- file = fp.file;
- filename = "";
- } else {
- var savedFilesPrefs = midMyPrefS.getBranch("extensions.mid.lastusedsets.");
- if (!savedFilesPrefs.prefHasUserValue(filePrefNum)) {
- mid_mud.util.localAlert("preference.not.found" , "extensions.mid.lastusedsets." + filePrefNum);
- return false;
- }
- file = savedFilesPrefs.getComplexValue(filePrefNum, Ci.nsILocalFile);
- if (!file.exists()) {
- mid_mud.util.localAlert("file.not.found", "");
- return false;
- }
- }
-
- if (!this.fileReader(file, midlines)) {
- return false;
- };
-
- mid_mud.arrangeLUFPrefs(file);
-
- if (filename === "") {
- filename = this.getDictionaryFilename();
- }
-
- mid_mud.midFromRestore = true; // not used
- mid_mud.changeDictionaryName(filename);
- mid_mud.loadDictionaries(midlines);
- return true;
- },
-
- restoreDefaultSet : function () {
-
-
- var midlines = [];
-
- if (mid_mud.dictionary != "default") {
- if (mid_mud.dictionary != "cancelled") {
- mid_mud.saveDSet();
- }
- }
-
- mid_mud.changeDictionaryName("default");
-
- var file = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties)
- .get("ProfD", Components.interfaces.nsIFile);
- file.append("mid_default.dis");
-
- if (!file.exists() || (file.fileSize == 0)) {
- mid_mud.changeDictionaryName("default");
- mid_mud.loadDictionaries();
- return false;
- }
-
- if (!this.fileReader(file, midlines)) {
- return false;
- };
-
-
- mid_mud.midFromRestore = true; // not used
- mid_mud.changeDictionaryName("default");
- mid_mud.loadDictionaries(midlines);
- return true;
- },
-
- getDictionaryFilename : function () {
-
- var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
- createInstance(Ci.nsIScriptableUnicodeConverter);
- conv.charset = "UTF-8";
-
- var savedFilesPrefs = midMyPrefS.getBranch("extensions.mid.lastusedsets.");
- if (savedFilesPrefs.prefHasUserValue(1)) {
- return conv.ConvertToUnicode(savedFilesPrefs.getCharPref(1));
- }
- return "Unknown";
-
- }
-
- };
-
-
- mid_mud.lookup = {
-
- lookupAgain : function (event) {
-
- var word = mid_mud.transMemory.getWord(event);
- if (!word) {
- return; // editing definition
- }
-
- domHelper.inputElement.value = word.getAttribute("label");
-
- mid_mud.saveInHistory = false;
- this.lookupWord(null);
- mid_mud.saveInHistory = true;
-
- },
-
-
- lookupFromContext : function () {
- domHelper.inputElement.value = this.getSelectionForLookup();
- this.lookupWord(null);
- },
-
- getSelectionForLookup : function () {
-
- var selection = null;
- var focusedWindow = document.commandDispatcher.focusedWindow;
- selection = focusedWindow.getSelection();
-
- if (!selection) {
- return selection;
- }
-
- if (document.popupNode) {
- var node = document.popupNode;
- var nodeLocalName = document.popupNode.localName.toUpperCase();
- if ((nodeLocalName == "TEXTAREA") ||
- (nodeLocalName == "INPUT" && node.type == "text")) {
- selection = node.value.substring(node.selectionStart, node.selectionEnd);
- }
- }
- return selection;
- },
-
- convertLookupWord : function (b, w) {
-
- var chs = null, cw = "";
- var converter = Cc['@mozilla.org/intl/texttosuburi;1']
- .createInstance(Ci.nsITextToSubURI);
-
- if (!(chs = b.xmlDic.getAttribute("inputencoding"))) {
- chs = b.contentDocument.characterSet;
- }
-
- try {
- cw = converter.ConvertAndEscape(chs, w);
- } catch (e) {
- cw = w;
- }
-
- return cw;
-
- },
-
-
- lookupWord : function (event) {
-
- if (event && event.originalTarget.nodeName == "treechildren") {
- return;
- }
-
- // lehet, hogy ez elΘg
- if (event && event.originalTarget.nodeName == 'command' &&
- document.commandDispatcher.focusedElement.id != "mid_searchWord") {
- return;
- }
-
- var i, url, smyWord, myBrowser;
- var myWord = domHelper.inputElement.value;
-
- myWord = myWord.replace(/['"+!%\\\/=\(\)\[\]\{\},\.\-?:_ <>]*$/g, "");
-
- if (myWord == "") {
- return;
- }
-
- domHelper.inputElement.value = myWord;
-
- for (i = 0; (myBrowser = document.getElementsByTagName("browser").item(i)); i++) {
- if (myBrowser.getAttribute("id") != "mid_MainBrowser") {
- // myBrowser.markupDocumentViewer.fullZoom = 1.5; // temp
- smyWord = this.convertLookupWord(myBrowser, myWord);
- if (myBrowser.xmlDic.getAttribute("method") == "POST") {
- if (myBrowser.xmlDic.getAttribute("engine_name")) {
- this.postInternalEngine(myBrowser, smyWord ) ; // FF's search engine
- } else {
- this.postURI(myBrowser, smyWord);
- }
- } else {
- if (myBrowser.xmlDic.getAttribute("method") == "func") {
- searchfunction = myBrowser.xmlDic.getAttribute("function_name");
- try {
- mid_mud.dictSpecific[searchfunction](myBrowser, myWord);
- } catch (e) {
- alert("Function error:" + searchfunction);
- }
- } else {
- url = myBrowser.xmlDic.getAttribute("url");
- if ( url != "" ) myBrowser.setAttribute("src", url.replace("XXX", smyWord));
- } // normal
- }
- }
- }
-
- domHelper.inputElement.focus();
- domHelper.inputElement.setSelectionRange(0, domHelper.inputElement.textLength);
-
- mid_mud.backCounter++;
-
- mid_mud.dictBrowsers.updateImages();
-
- if (mid_mud.transMemory.getLastWord() == myWord) { // same as the last word
- return;
- }
- if (!mid_mud.saveInHistory) {
- return;
- }
- mid_mud.transMemory.saveWordToTree(myWord, "");
-
- },
-
- postURI : function (browser, word) {
-
- var dataString = browser.xmlDic.getAttribute("inputs").replace("XXX", word);
-
- var postData = Cc["@mozilla.org/network/mime-input-stream;1"].
- createInstance(Ci.nsIMIMEInputStream);
-
- var stringStream = Cc["@mozilla.org/io/string-input-stream;1"].
- createInstance(Ci.nsIStringInputStream);
-
- stringStream.setData(dataString, -1);
- postData.addHeader("Content-Type", "application/x-www-form-urlencoded");
- postData.addContentLength = true;
- postData.setData(stringStream);
-
- var url = browser.xmlDic.getAttribute("url");
-
- browser.webNavigation.loadURI(url,
- browser.webNavigation.LOAD_FLAGS_NONE,
- browser.currentURI ,
- postData, null);
-
- },
-
- postInternalEngine : function ( browser, word ) {
- var searchService = Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService);
- var engine_name = browser.xmlDic.getAttribute("engine_name");
- var engine = searchService.getEngineByName(engine_name)
- if (!engine) {
- return
- }
- var submission = engine.getSubmission(word, null);
- var postData = submission.postData;
- var url = browser.xmlDic.getAttribute("url");
- browser.webNavigation.loadURI(url,
- browser.webNavigation.LOAD_FLAGS_NONE,
- browser.currentURI ,
- postData, null);
-
-
- }
-
-
- };
-
-
- mid_mud.mainBrowser = {
-
- popupShowing : function () {
-
- if (mid_mud.lookup.getSelectionForLookup() == '') {
- document.getElementById("mid_mainBCL").setAttribute("disabled", "true");
- document.getElementById("mid_mainBCC").setAttribute("disabled", "true");
- } else {
- document.getElementById("mid_mainBCL").setAttribute("disabled", "false");
- document.getElementById("mid_mainBCC").setAttribute("disabled", "false");
- }
-
- var mid_mb = domHelper.browserBrowser;
-
- if (mid_mb.canGoBack == false) {
- document.getElementById("mid_mainBCB").setAttribute("disabled", "true");
- } else {
- document.getElementById("mid_mainBCB").setAttribute("disabled", "false");
- }
-
- if (mid_mb.canGoForward == false){
- document.getElementById("mid_mainBCF").setAttribute("disabled", "true");
- } else {
- document.getElementById("mid_mainBCF").setAttribute("disabled", "false");
- }
-
- },
-
- goBack : function () {
- domHelper.browserBrowser.goBack();
- },
-
- goForward : function () {
- domHelper.browserBrowser.goForward();
- },
-
- navigate : function () {
-
- var midUrl = document.getElementById("mid_Url").value;
- var regexp = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
- var ar = regexp.exec(midUrl);
- if (!ar[1]) {
- midUrl = "http://" + midUrl;
- }
-
- // domHelper.browserBrowser.markupDocumentViewer.fullZoom = 1.5; // temp
- domHelper.browserBrowser.setAttribute("src", midUrl);
-
-
- }
-
- };
-
-
- mid_mud.dictBrowsers = {
-
- popupShowing : function (event) {
-
- if (mid_mud.lookup.getSelectionForLookup() == "") {
- document.getElementById("mid_BCL").setAttribute("disabled", "true");
- document.getElementById("mid_BCC").setAttribute("disabled", "true");
- } else {
- document.getElementById("mid_BCL").setAttribute("disabled", "false");
- document.getElementById("mid_BCC").setAttribute("disabled", "false");
- }
-
- var myTabPanel = domHelper.tabpanelsElement;
-
- if (myTabPanel.selectedPanel.canGoBack === false) {
- document.getElementById("mid_BCB").setAttribute("disabled", "true");
- } else {
- document.getElementById("mid_BCB").setAttribute("disabled", "false");
- }
-
- if (myTabPanel.selectedPanel.canGoForward === false) {
- document.getElementById("mid_BCF").setAttribute("disabled", "true");
- } else {
- document.getElementById("mid_BCF").setAttribute("disabled", "false");
- }
-
- },
-
- allBrowsersStop : function () {
- var myBrowser;
- const nsIWebNavigation = Ci.nsIWebNavigation;
- const flags = nsIWebNavigation.STOP_ALL;
-
- for (i = 0; (myBrowser = document.getElementsByTagName("browser").item(i)); i++) {
- try {
- if (myBrowser.getAttribute("id") != "mid_MainBrowser") {
- myBrowser.webNavigation.stop(flags);
- }
- } catch (e) {
- alert(myBrowser.getAttribute("homepage"));
- }
- }
-
- },
-
- updateImages : function () {
- var b = document.getElementById("back_image");
- var f = document.getElementById("for_image");
- if (mid_mud.forwardCounter < 1) {
- f.setAttribute("canwalk", "false");
- }
- else {
- f.setAttribute("canwalk", "true");
- }
- if (mid_mud.backCounter < 0) {
- b.setAttribute("canwalk", "false");
- } else {
- b.setAttribute("canwalk", "true");
- }
- },
-
- thisBrowserBack : function () {
- domHelper.tabpanelsElement.selectedPanel.goBack();
-
- },
-
- thisBrowserForward : function () {
- domHelper.tabpanelsElement.selectedPanel.goForward();
- },
-
- allForward : function () {
-
- var myBrowser, word, i;
-
- if (mid_mud.forwardCounter < 0) {
- return false;
- }
-
- for (i = 0; (myBrowser = document.getElementsByTagName("browser").item(i)); i++) {
- if (myBrowser.getAttribute("id") == "mid_MainBrowser") {
- continue;
- }
- if (myBrowser.xmlDic.getAttribute("method") == "POST") {
- word = document.getElementsByTagName("treecell").item((mid_mud.backCounter + 1) * 2);
- mid_mud.lookup.postURI(myBrowser,
- mid_mud.lookup.convertLookupWord(myBrowser,
- word.getAttribute("label")));
-
- } else {
- if (myBrowser.webNavigation.canGoForward) {
- myBrowser.webNavigation.goForward();
- }
- }
- }
- mid_mud.backCounter++;
- mid_mud.forwardCounter--;
- mid_mud.dictBrowsers.updateImages();
-
- },
-
- allBack : function () {
-
- var myBrowser, word, i;
-
- if ( mid_mud.backCounter < -1 ) {
- return false;
- }
-
- for (i = 0; (myBrowser = document.getElementsByTagName("browser").item(i)); i++) {
- if (myBrowser.getAttribute("id") == "mid_MainBrowser") {
- continue;
- }
- if ((myBrowser.xmlDic.getAttribute("method") == "POST") && (mid_mud.backCounter!=0)) {
- word = document.getElementsByTagName("treecell").item((mid_mud.backCounter + 1) * 2);
- mid_mud.lookup.postURI(myBrowser,
- mid_mud.lookup.convertLookupWord(myBrowser,
- word.getAttribute("label")));
-
- } else {
- if (myBrowser.webNavigation.canGoBack) {
- myBrowser.webNavigation.goBack();
- }
- }
- }
- mid_mud.forwardCounter++;
- mid_mud.backCounter--;
- mid_mud.dictBrowsers.updateImages();
-
- }
-
- };
-
-
- mid_mud.finder = {
-
- positionToFirstHit : function (doc) {
-
- var keres = domHelper.inputElement.value;
- var cw = doc.body.clientWidth / 2;
- var reps = new RegExp(keres, 'gi');
- var s = doc.body.innerHTML.replace(reps, '<midtag>' + keres + '</midtag>');
- doc.body.innerHTML = s;
- var a = [];
- a = doc.getElementsByTagName("midtag");
- for (var i = 0; i < a.length; i++ ) {
- var e = a[i];
- var r = e.getBoundingClientRect();
- if (r.left > cw) {
- j = i;
- } else {
- break;
- }
- }
- if (e) {
- e.setAttribute("style","background-color : yellow;");
- doc.defaultView.scroll(1, r.top - 10);
- }
- },
-
-
- findNext : function (b) {
- var findInst;
- if (!b || !domHelper.inputElement.value) {
- return null;
- }
- b.contentWindow.focus();
- findInst = b.webBrowserFind;
- findInst.searchString = domHelper.inputElement.value;
- findInst.matchCase = false;
- findInst.wrapFind = true;
- findInst.findBackwards = false;
- findInst.entireWord = false;
- findInst.searchFrames = true;
-
- try {
- findInst.findNext();
- } catch (e) {};
- },
-
- findStringOnPage : function () {
-
- var keres = domHelper.inputElement.value;
- if (keres == "") {
- return;
- }
-
- if (document.commandDispatcher.focusedWindow &&
- (domHelper.browserBrowser.currentURI.spec ==
- document.commandDispatcher.focusedWindow.location)) {
- this.findNext(domHelper.browserBrowser);
- return;
- }
-
- if (domHelper.tabboxElement.selectedIndex > -1) {
- var win = domHelper.tabboxElement.selectedPanel.contentWindow;
- this.findNext(domHelper.tabboxElement.selectedPanel);
- }
- },
-
- findInPage : function () {
- if (domHelper.tabboxElement.selectedIndex > -1) {
- this.findNext(domHelper.tabboxElement.selectedPanel);
- var sel = document.commandDispatcher.focusedWindow.getSelection(); // bad hack, not an input box
- if (sel == "")
- this.findNext(domHelper.tabboxElement.selectedPanel); // hope it is not an input field
- }
- },
-
- findInNextPage : function (searchFlag) { // simplify me, we have no collapsed browsers yet
- var tabbox = domHelper.tabboxElement;
- var t = domHelper.tabboxElement.selectedPanel;
- if (domHelper.tabboxElement.selectedIndex > -1) {
- if (!t.nextSibling) {
- tabbox.selectedIndex = 0;
- } else {
- tabbox.selectedIndex++;
- }
- if (false) { // searchFlag
- t = domHelper.tabboxElement.selectedPanel;
- if (!t.contentDocument.midTainted) {
- this.positionToFirstHit(t.contentDocument);
- }
- t.contentDocument.midTainted=true;
- }
- }
- },
-
- findInPrevPage : function (searchFlag) {
-
- var tabbox = domHelper.tabboxElement;
- var t = domHelper.tabboxElement.selectedPanel;
- if (domHelper.tabboxElement.selectedIndex > -1) {
- if (!t.previousSibling) {
- tabbox.selectedIndex = domHelper.tabpanelsElement.childNodes.length - 1;
- } else {
- tabbox.selectedIndex--;
- }
- if (false) { // searchFlag ** experimental, not in prod. release **
- t = domHelper.tabboxElement.selectedPanel;
- if (!t.contentDocument.midTainted) {
- this.positionToFirstHit(t.contentDocument);
- }
- t.contentDocument.midTainted=true;
- }
- }
- }
-
- };
-
-
- mid_mud.dictSpecific = {
-
- cambFrEn : function (browser, word) {
-
- word = word.toLowerCase();
- word = mid_mud.util.stripAccents(word);
- var url = browser.xmlDic.getAttribute("url");
- browser.setAttribute("src", url.replace("XXX", word));
-
- },
-
- onetRuPl : function (browser, word) {
-
- word = mid_mud.util.toUniNumber(word);
- var url = browser.xmlDic.getAttribute("url");
- browser.setAttribute("src", url.replace("XXX", word));
-
- },
-
- oroszmagyar : function (browser, word) { // not used...later?
- browser.contentDocument.getElementById("word").setAttribute("value", word);
- browser.contentWindow[Dictionary][search]();
- }
-
- };
-
-
-
- mid_mud.transMemory = {
-
- popupShowing : function (event) {
-
- midRowCounter = -1; // global
- var row = {}, col = {}, child = {};
- var target = document.popupNode;
- if (target.localName == "treechildren") {
- var tree = document.getElementById("mid_wordstree");
- tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, child);
- midRowCounter = row.value;
- }
- document.getElementById('mid_treecontextpopup').setAttribute("collapsed", "false");
- if (midRowCounter < 0) {
- document.getElementById('mid_treecontextpopup').setAttribute("collapsed", "true");
- }
- },
-
- getTreeRow : function (event) {
-
- midRowCounter = -1; // global
- var row = {}, col = {}, child = {};
- var target;
- if (event.detail == 2) {
- target = event.originalTarget;
- } else {
- target = document.popupNode;
- }
- if (target.localName == "treechildren")
- {
- var tree = document.getElementById("mid_wordstree");
- tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, child);
- midRowCounter = row.value;
- }
- return midRowCounter;
- },
-
- wordsTreeLookup : function (event) {
-
- var word = document.getElementsByTagName("treecell").item(midRowCounter * 2);
-
- domHelper.inputElement.value = word.getAttribute("label");
- mid_mud.saveInHistory = false;
- mid_mud.lookup.lookupWord();
-
- mid_mud.saveInHistory = true;
-
- },
-
- fillDefinition : function (event) {
-
- // midRowCounter is known from popupshowing
- var def = document.getElementsByTagName("treecell").item(midRowCounter * 2 + 1);
-
- var defstrbundle = document.getElementById("tree.definition");
- var definition = defstrbundle.getString("tree.definition");
-
- def.setAttribute("label", prompt(definition, def.getAttribute("label")));
-
- },
-
- removeRow : function (event) {
- var parent, cell, tree ;
- tree = document.getElementById("mid_wordstree");
- cell = document.getElementsByTagName("treecell").item(midRowCounter * 2 + 1);
- cell.parentNode.removeChild(cell);
- cell = document.getElementsByTagName("treecell").item(midRowCounter * 2);
- cell = document.getElementsByTagName("treerow").item(midRowCounter);
- parent = cell.parentNode;
- parent.removeChild(cell);
- parent.parentNode.removeChild(parent);
- mid_mud.updateStatusBarCounter();
- },
-
- saveWordToTree : function (myWord, myDef) {
-
- var wordsTreeChildren = document.getElementById("mid_wordstreechildren");
- var wordsTree = document.getElementById("mid_wordstree");
- var wordsTreeRow = wordsTree.view.rowCount;
-
- var newTreeItem = document.createElement("treeitem");
- var newTreeRow = document.createElement("treerow");
- var newWord = document.createElement("treecell");
- var newDef = document.createElement("treecell");
-
- newWord.setAttribute("label", myWord);
- newWord.setAttribute("editable", "false");
- newTreeRow.appendChild(newWord);
- newDef.setAttribute("label", myDef);
- newTreeRow.appendChild(newDef);
-
- newTreeItem.appendChild(newTreeRow);
- wordsTreeChildren.appendChild(newTreeItem);
-
- wordsTree.treeBoxObject.ensureRowIsVisible(wordsTreeRow);
- mid_mud.updateStatusBarCounter();
- },
-
- getWord : function (event) {
-
- var tree = document.getElementById("mid_wordstree");
- var tbo = tree.treeBoxObject;
- var row = {}, col = {}, child = {};
-
- tbo.getCellAt(event.clientX, event.clientY, row, col, child);
-
- if (col.value.id != "mid_words") {
- return null; // editing definition
- }
- return document.getElementsByTagName("treecell").item(this.getTreeRow(event) * 2);
- },
-
- getLastWord : function () {
- var lastWord = "";
- var tree = document.getElementById("mid_wordstree");
- var rowCounter = tree.view.rowCount;
- if (rowCounter > 0) {
- var col = tree.columns ? tree.columns.mid_words : "mid_words";
- try {
- lastWord = tree.view.getCellText(rowCounter - 1, col);
- } catch (e) {
- alert( "getLastWord: " + e.name + "-" + e.message);
- }
- }
- return lastWord;
- },
-
- removeAllRows : function (event) {
- var treeChildren = document.getElementById("mid_wordstreechildren");
- while (treeChildren.hasChildNodes()) {
- treeChildren.removeChild(treeChildren.firstChild);
- }
- mid_mud.updateStatusBarCounter();
- },
-
- getRowCount : function () {
- return document.getElementById("mid_wordstree").view.rowCount;
- },
-
- saveWordsToFile : function () {
-
- var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
- createInstance(Ci.nsIScriptableUnicodeConverter);
- conv.charset = "UTF-8";
-
- var nsIFilePicker = Ci.nsIFilePicker;
- var file = null, fileStream = null;
-
- var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
- fp.init(window, mid_mud.util.getLocaleString("choose.file"), nsIFilePicker.modeSave);
- fp.appendFilters(nsIFilePicker.filterAll);
- if (fp.show() == nsIFilePicker.returnCancel) {
- return false;
- }
- file = fp.file;
-
- fileStream = Cc["@mozilla.org/network/file-output-stream;1"].
- createInstance(Ci.nsIFileOutputStream);
- try {
- fileStream.init(file, 0x04 | 0x08 | 0x20, 420, 0);
- } catch (e) {
- if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
- mid_mud.util.localAlert("file.access.denied", "");
- }
- else {
- alert("i/o error: " + e.name + "-" + e.message);
- }
- }
- var i, cell_1, cell_2, word, def;
- var tree = document.getElementById("mid_wordstree");
-
- for (i = 0; (cell_1 = tree.getElementsByTagName("treecell").item(i)); i = i + 2) {
- word = cell_1.getAttribute("label");
- cell_2 = document.getElementsByTagName("treecell").item(i + 1);
- def = cell_2.getAttribute("label");
- data = conv.ConvertFromUnicode(word + ";" + def + "\n");
- fileStream.write(data, data.length);
- }
- fileStream.close();
- mid_mud.util.localAlert("file.saved", "");
- },
-
- readWordsFromFile : function () {
-
- var conv = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
- createInstance(Ci.nsIScriptableUnicodeConverter);
- conv.charset = "UTF-8";
-
- var nsIFilePicker = Ci.nsIFilePicker;
- var file = null, sorstr = "", sor = [];
-
- var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
- fp.init(window, mid_mud.util.getLocaleString("choose.file"), nsIFilePicker.modOpen);
- fp.appendFilters(nsIFilePicker.filterAll);
- if (fp.show() == nsIFilePicker.returnCancel) {
- return false;
- }
- file = fp.file;
-
-
- var istream = Cc["@mozilla.org/network/file-input-stream;1"]
- .createInstance(Ci.nsIFileInputStream);
- try {
- istream.init(file, 0x01, 444, 0);
- } catch (e) {
- if (e.name == "NS_ERROR_FILE_ACCESS_DENIED") {
- mid_mud.util.localAlert("file.access.denied", "");
- }
- else {
- alert("i/o error: " + e.name + "-" + e.message);
- }
- }
- istream.QueryInterface(Ci.nsILineInputStream);
-
- /* read lines into array */
- var line = {}, lines = [], hasmore;
- do {
- hasmore = istream.readLine(line);
- sorstr = conv.ConvertToUnicode(line.value);
- sor[0] = "";
- sor[1] = "";
- sor = sorstr.split(";");
- this.saveWordToTree(sor[0], sor[1]);
- lines.push(line.value);
- } while (hasmore);
-
- istream.close();
- }
-
- };
-
-
-
-
-
-
- mid_mud.util = {
- prompts : Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService),
-
- confirm : function (what) {
- return this.prompts.confirm(window, "mid", what);
- },
-
- stripAccents : function (str) {
-
- var s = str, i;
-
- var rExps = [ /[\xC0-\xC2]/g, /[\xE0-\xE2]/g,
- /[\xC8-\xCA]/g, /[\xE8-\xEB]/g,
- /[\xCC-\xCE]/g, /[\xEC-\xEE]/g,
- /[\xD2-\xD4]/g, /[\xF2-\xF4]/g,
- /[\xD9-\xDB]/g, /[\xF9-\xFB]/g,
- /[\xC7]/g, /[\xE7]/g];
-
- var repChar = ['A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', 'C', 'c'];
-
- for (i = 0; i < rExps.length; i++) {
- s = s.replace(rExps[i], repChar[i]);
- }
- return s;
- },
-
- toUniNumber : function (s) {
-
- var c, m, o = "", i = s;
-
- for (m = 0; i.charAt(m); ++m) {
- if (((c = i.charCodeAt(m)) < 128 && c != 38) ||
- (c >= 160 && c <= 255 &&
- c != 166 &&
- c != 173 && c != 178 && c != 179 &&
- c != 185 && c != 188 && c != 189 &&
- c != 190 &&
- c != 208 &&
- c != 215 &&
- c != 221 && c != 222 &&
- c != 240 &&
- c != 253 && c != 254)) {
- o = o + i.charAt(m);
- } else {
- if (c == 38) {
- o = o + "&";
- }
- else {
- o = o + "" + c + ";";
- }
- }
- }
- return escape(o);
- },
-
- populateWithAttributes : function (domObj) {
- var len = arguments.length;
- while (len > 2) {
- domObj.setAttribute(arguments[len - 2], arguments[len - 1]);
- len = len - 2;
- }
- },
-
- inArray : function (arr, val) {
- var i;
- if (!arr) {
- return false;
- }
-
- for (i = 0; i < arr.length; i++) {
- if (arr[i] === val) {
- return true;
- }
- }
- return false;
- },
-
- browserWrapper: function (a) {
-
- var browserName = "";
-
- try {
- var appInfo = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
- } catch (e) {}
-
- if (appInfo) {
- browserName = appInfo.name;
- }
- switch (browserName) {
- case "Iceweasel":
- a.Iceweasel();
- break;
- case "Firefox":
- a.Firefox();
- break;
- case "Browser": // Flock now
- a.Flock();
- break;
- case "Flock": // Flock later?
- a.Flock();
- break;
- case "Netscape":
- a.Netscape();
- break;
- case "SeaMonkey":
- a.SeaMonkey();
- break;
- case "mid": // Xulrunner mid
- a.mid();
- break;
- default:
- alert("Sorry, unknown or old browser");
- }
- },
-
- dumpToConsole: function (aMessage) {
-
- var consoleService = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
- consoleService.logStringMessage("mid_ " + aMessage);
- },
-
- getLocaleString : function (lsName) {
-
- var myprop =
- Cc["@mozilla.org/intl/stringbundle;1"].getService(Ci.nsIStringBundleService);
-
- var mystrings = myprop.createBundle("chrome://mid/locale/mid.properties");
- return mystrings.GetStringFromName(lsName);
-
- },
-
- localAlert : function (p,q) {
- var msbd = document.getElementById(p);
- var ls = msbd.getString(p);
- this.prompts.alert(window, "mid", ls + q);
- },
-
- copyText : function () {
- const gClipboardHelper =
- Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
- gClipboardHelper.copyString(mid_mud.lookup.getSelectionForLookup());
- }
-
-
- };
-